//
//  YYLUserAccountViewModel.swift
//  XinlangWeibo
//
//  Created by yangyinglei on 2017/3/30.
//  Copyright © 2017年 yangyinglei. All rights reserved.
//

import UIKit

class YYLUserAccountViewModel: NSObject {
    //viewModel单例的全局访问点   并且不让子类访问init方法
    static let shareViewModel:YYLUserAccountViewModel = YYLUserAccountViewModel()
    
    //创建单例的时候 肯定走init方法  重写构造函数 并且不让子类访问init方法
    private override init() {
        super.init() //先创建对象 再设置属性  保证单例对象一创建就能从沙盒里获取userAccount
        userAccount = YYLUserAccount.loadUserAccount()
    }
    
    //viewModel引用的的模型
    var userAccount: YYLUserAccount?
    
    //封装获取accessToken的逻辑
    var accessToken: String? {
    //获取当前过期时间对象
        if userAccount?.expiresDate?.compare(Date()) == ComparisonResult.orderedDescending {
        //表示过期时间大于当前时间  表示没过期
        return userAccount?.access_token
        } else {
        //表示过期了
        return nil
        }
    }
    
    
    //MARK:------属性判断是否登录
    var isLogin: Bool{
    return accessToken != nil
    
    }
 
    //通过code获取token
    func requestAccessToken(code: String, callBack: @escaping ((Bool)-> ())) {
        
        YYLNetTools.sharedTools.requestaccessToken(code: code) { (response, error) in
            if error != nil {
                print("获取token时网络请求失败，\(error)")
                callBack(false)
                return
            }
            //到这里表示请求成功
            guard let dic = response as? [String: Any] else {
                print("服务器给的格式不对")
                callBack(false)
                return
            }
            //表示数据格式正确   把字典转模型
            
            self.userAccount = YYLUserAccount.init(dic: dic)
            
            //通过token和uid获取用户信息
            self.requestUserInfo(userAccount: self.userAccount!,callBack: callBack)
        }
        
    }
    
    //通过token和uid获取用户信息
    fileprivate func requestUserInfo(userAccount: YYLUserAccount, callBack: @escaping ((Bool)->())) {
        
        let token = userAccount.access_token!
        let uid = userAccount.uid
        
        YYLNetTools.sharedTools.requestUserInfo(access_token: token, uid: uid) { (response, error) in
            if error != nil {
                print("获取用户信息时网络请求失败，\(error)")
                callBack(false)
                return
            }
            //到这里表示请求成功
            guard let dic = response as? [String: Any] else {
                print("服务器给的格式不对")
                callBack(false)
                return
            }
            //到这里表示数据类型正常
            let name = dic["name"] as! String
            let avatar_large = dic["avatar_large"] as! String
            
            userAccount.name = name
            userAccount.avatar_large = avatar_large
            
            userAccount.saveUserAccount()
            
//            print(userAccount,self.userAccount ?? nil)
            //  请求成功
            callBack(true)
        }
        
        
    }

    
}
